MySQL 为许多 table 的公共字段创建公共 table
MySQL creating a common table for common fields of many tables
我的项目中有 100 多个 MYSQL table,大部分项目都有 created_by、last_modified_date、last_modified_by 和很少有其他领域。用这些公共字段创建一个新的 table 并与此 table 添加一对一的关系是个好主意吗?例如
- common_table:id,created_by,last_modified_by
- table1:id,姓名,地址,common_table_id
- table2: id, name, balance, date, common_table_id
- table3: id, price, isActive, common_table_id
- tableN: 字段...., common_table_id
在上面的例子中,我有一个 table 名称 common_table 和所有公共字段,这个 table 是一对一的关系与所有其他 tables。这使我更容易添加或更新公共字段,而无需在所有 table 中进行复制。由于我处于开发阶段,此方法是否存在性能缺陷或将来会导致其他生产问题?
在查询方面,我预计不会有任何问题——假设 common_table_id
有一个主键。如果您有非常大的 table 和小标签,则可能会出现一些问题。公共 table 最终可能会被加载到内存中,即使只使用了小块(因为引用的 table 很小)。
一个更大的问题可能是更新,其中 inserts/updates 在不同的 table 上现在有共同的列,这些列也在被修改。这会引入锁定依赖关系。但是,如果插入相对不频繁(每秒不超过几次),这可能不是问题。
您可能想要调整模型以在公共 table 中也有一个 table id。您可以使用它来对 table 进行分区。这样,只需要将给定 table 的公共元素加载到内存中以进行查询和更新。
1对1是危险信号。
冗余数据是危险信号。
如果 table1
和 table2
是 1:1,很少有正当理由将它们分成两个 table。即使这导致单个 table.
中有 100 列
呈现小组数据。一定要包括任何变体——我不知道 balance
和 price
是否共享 相同的 create_date,或者每个都有自己的create_date,而且可能不一样。
我的项目中有 100 多个 MYSQL table,大部分项目都有 created_by、last_modified_date、last_modified_by 和很少有其他领域。用这些公共字段创建一个新的 table 并与此 table 添加一对一的关系是个好主意吗?例如
- common_table:id,created_by,last_modified_by
- table1:id,姓名,地址,common_table_id
- table2: id, name, balance, date, common_table_id
- table3: id, price, isActive, common_table_id
- tableN: 字段...., common_table_id
在上面的例子中,我有一个 table 名称 common_table 和所有公共字段,这个 table 是一对一的关系与所有其他 tables。这使我更容易添加或更新公共字段,而无需在所有 table 中进行复制。由于我处于开发阶段,此方法是否存在性能缺陷或将来会导致其他生产问题?
在查询方面,我预计不会有任何问题——假设 common_table_id
有一个主键。如果您有非常大的 table 和小标签,则可能会出现一些问题。公共 table 最终可能会被加载到内存中,即使只使用了小块(因为引用的 table 很小)。
一个更大的问题可能是更新,其中 inserts/updates 在不同的 table 上现在有共同的列,这些列也在被修改。这会引入锁定依赖关系。但是,如果插入相对不频繁(每秒不超过几次),这可能不是问题。
您可能想要调整模型以在公共 table 中也有一个 table id。您可以使用它来对 table 进行分区。这样,只需要将给定 table 的公共元素加载到内存中以进行查询和更新。
1对1是危险信号。
冗余数据是危险信号。
如果 table1
和 table2
是 1:1,很少有正当理由将它们分成两个 table。即使这导致单个 table.
呈现小组数据。一定要包括任何变体——我不知道 balance
和 price
是否共享 相同的 create_date,或者每个都有自己的create_date,而且可能不一样。