我正在为一个系统做数据库设计工作,我需要将一些可变长度数组存储到mysql数据库中。
如果不是数千,则数组的长度(最多)为数百个。
将定期创建新数组,可能每天数十个。
澄清,1。大致意思
CREATE TABLE array (id INT, valuetype VARCHAR(64), ...)
CREATE TABLE arr_values (id INT, val DOUBLE, FK array_id)
和2.
CREATE TABLE array (id INT, valuetype VARCHAR(64),...)
CREATE TABLE arr_values (id int, val DOUBLE, FK array_id) -- template table
CREATE TABLE arr1_values LIKE arr_values ...
arr_values将用作通过连接到完整数组来查询的数组。 关于为什么某些方法比其他方法更好的任何想法?
答案 0 :(得分:26)
几张桌子中有很多行。为每个新结构/记录创建一个新表是绝对不正确的,也是使用关系数据库的最糟糕的方法。
事实上,几乎在您的代码动态创建表的任何时候,您都在做一些非常糟糕的事情。
答案 1 :(得分:7)
正如对这些问题的所有答案一样,它总是在某种程度上取决于您的最终结果需要是什么,但就个人而言,我总是倾向于使用单个表而不是动态创建的表 - 这使得查询更加简单。当你查看数据库模式时,它也会使它变得更简单(我认为) - 成千上万的表可能会在直接访问数据库时更容易找到所需的内容。
此外,如果您发现需要在某个位置使用另一个字段扩展“数组”,则意味着将有一个数据库表要更改,而不是很多。
答案 2 :(得分:1)
在我看来,每个数据数组都有不同的架构。您是否考虑过使用NoSQL数据库?在我看来,这将更容易合作。
如果你必须坚持使用MySQL,那么你肯定希望尽可能少的表。根据您提供的内容,您可以拥有一个包含三列的表格 -
array ;connects all the related records to the correct array
field ;the name of the field (array key)
value ;the actual value for that field
并且,如果您需要同一数组“type”的多个副本,请同时添加实例列。
答案 3 :(得分:0)
增加表的数量,直到模式规范化(很少或没有冗余/重复)。不要增加表之外的数量,并且要谨慎添加新的性能表(现代数据库,除少数例外,比你想象的要快),或处理边缘情况,例如每次发生一次的重复应用程序的生命周期,或<1%的行。
如果我们知道问题的范围 - 这些地址,客户,书籍还是什么,那么理解您的问题也会更容易?