簡體   English   中英

如何在 SQL 列中存儲用戶生成的不同大小的字符串數組?

[英]How to store a user-generated String array of varying size in SQL column?

我們試圖在數據庫列中保存多個字符串。 我們使用單列,因為數量在變化,它可能在 15-50 之間的任何地方,所以顯然多列可能不可行。

另一個問題是數據是用戶生成的。 如果不是這種情況,我們將使用拆分字符並且不會有問題,但是我們不能保證數據不會包含這些字符。

你們會推薦什么來實現這一目標?

您可以將字符串放入 JSON 數組中,對其進行字符串化,然后存儲結果。

要取回原始的 JSON 數組,只需解析存儲的字符串即可。

通常,在數據庫中,您有 3 個選項:

  1. [最好,通常] - 嘿,它被稱為“關系數據庫”是有原因的,建立關系,將字符串存儲在單獨的表中。 例如,您想存儲某人擁有的寵物的名稱,可以是任何數字:從 0 到很多: CREATE TABLE person_pets (id int NOT NULL, person_id int FOREIGN KEY REFERENCES persons(id), pet_name varchar NOT NULL, PRIMARY KEY(id)); 注意:假設一個非愚蠢的數據庫引擎(通常 mysql 算作愚蠢,所以如果可以的話盡量不要使用數據庫的災難),你可以返回一行並且仍然有所有的寵物名字,例如: SELECT person.name, ARRAY_AGG(pet.name) AS petNames FROM person LEFT JOIN pets ON pets.person = person.id ORDER BY person.name;

  2. 一些數據庫引擎,例如 postgres,允許 arrays。JDBC 讓你閱讀這些: CREATE TABLE person (id int NOT NULL, .... other fields...., pet_names text[]); - 使用resultSet.getArray()獲取此數據,並且有大量 SQL 原語可以搜索它們,請參閱 postgres 數組文檔。

  3. [通常,最糟糕的,到目前為止],使用 escaping 機制將多個字符串壓縮成單個格式化字符串的機制。 您可以通過 JSON-izer 處理字符串並存儲結果數據, ["Joe said. \"Hello,\" to me", "Bye!"]作為字符串存儲在數據庫中。 這完全是糟糕的,因為它幾乎不可能使用數據庫查詢來搜索任何這些東西,而且沒有充分的理由這樣做。 所以,不要。 請注意,psql 實際上支持“json”作為列類型。 與使用 arrays 相比,我真的沒有看到太多這樣做的理由(至少,與 JDBC 中的交互相比數組要復雜得多),但至少你可以編寫一個查詢,比如, select 所有擁有名為“Rover”的寵物的人,如果您進行 jsonize 然后將結果轉儲到 varchar/text 列中,這是不可行的。

您在問如何做 #3,但也許您還沒有真正考慮清楚,或者您不知道選項 #1 和 #2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM