设计我当前的应用程序我遇到了一个问题:用户提供了以下要求:
对于每个企业(假设有一个企业表,以enterprise_id为关键),有一个固定的数据集,结构或多或少是这样的:
| Income | Declared | Expenses | Normalized | Whatever | etc
-------------+--------+----------+----------+------------+----------+-...
Short term |
Medium term |
Long term |
Unspecified |
Unknown |
关键是(概念上)列是固定的,行是固定的。固定的,我的意思是这是我国的书面法律!所以短期内不会发生变化。
我的疑问是:“user”表的每个实例(带有固定的M列和N行)对我来说看起来像一个DB行(与enterprise_id有1:1的对应关系,所有数据都会被保存/每次检索为单个块,等等)。另一方面,这是很多专栏(在我的真实应用程序中MxN可能是一百个),坦率地说,看起来很难看,所以我对此感到不安。
那么,我应该为这个用户数据创建一个表,带有(MxN)列(加上一个用于enterprise_id外键),或者我应该创建两个表,一个带有可能的“user”行(“短期”等),另一个只有列(“收入”等),在这种情况下是每一行(enterprise_id,possible_rows_id,income,declared_income等)。
提前致谢!
答案 0 :(得分:1)
假设价值都是某种货币,我首先想到的是你可能需要一张这样的表:
term category term_category_value
-- -- --
Short term Income <some currency amount>
Short term Declared <some currency amount>
...
Short term Whatever <some currency amount>
Middle term Income <some currency amount>
Middle term Declared <some currency amount>
...
根据您的dbms,使这种数据看起来像电子表格可能相当容易或稍微困难。但是你只需构建一个视图来做到这一点。例如,SQL Server有PIVOT。其他一些平台称之为CROSSTAB。
答案 1 :(得分:0)
如果列为1:1且具有Enterprise,则它们应位于Enterprise中。但在某些时候,你会遇到行长最大值。
因此,使用带有MxN列和EnterpriseId的第二个表作为PK和FK。