我有桌子,
Table Book
id,name,buyers
每行都有买家名单。
买家人数约10万。
所以现在我有两个想法。
第一个是
将 100000 个元素的数组按行压入
id, name, buyers
1, nice story,[1042,13534,14534,15353,,,,,.....]
第二个是
再做一张桌子
Table Buyers
buyer_id, book_id
1042 , 1
13534 , 1
14534 , 1
15353 , 1
我猜想法 1 的数据库总大小很小,但这不是处理这么大数组的好方法?
哪一种更快且最佳实践?
在 JSON 中存储数据实际上比存储整数更大。
以文本形式存储的数字比以二进制整数形式存储的数字占用更多字节。例如“255”需要三个字节作为文本。但相同的整数值只需要一个字节存储为 0xFF。
就性能而言,如何向现有列表添加一个值或删除一个值?如果您存储第二个表,这很容易 - 您只需插入或删除一行。但如果它存储在 JSON 中,你会怎么做呢?
如何确保列表仅具有唯一值?
如果您需要知道列表中值的计数怎么办?
如果值必须是外键,即必须存在于另一个表的主键中,如何强制执行?
JSON 可以存储各种其他格式,那么如何确保此列表仅保留整数列表?
其中大多数都是可以解决的,但我的观点是解决方案并不那么简单,而且 SQL 会更复杂。您将需要更多时间来学习如何执行和测试。其他开发人员需要更多时间加入您的团队并学习如何维护代码。
您询问的最佳实践是做可能有效的最简单的事情。在这种情况下,这意味着当您使用关系数据库时,将数据存储在关系中。使用 JSON 不是关系。