我有一个表设计方案,作为非DBA类型,我想就哪种方案更具可扩展性提出意见。
假设您被要求在都市圈的房屋上记录信息,从一个小社区(200座房屋)开始,但最终增长到5000000多个房屋。
您需要存储以下基本信息:ID#(可以用作唯一索引的唯一批号),Addr,City,State,Zip。很好,简单的表可以处理它。
但是每年,都将要求您记录有关所有房屋的额外信息-信息将每年更改。因此,例如,在第一年,要求您记录所有者的姓氏和平方英尺。第二年,要求您保留姓氏,但丢弃平方英尺,而是开始收集所有者的名字。
最后-每年,额外列的数量都会改变。可能从2个额外的列开始,然后在明年移至6,然后回落至2。
因此,一种表方法是尝试将自定义信息添加为房屋表中的列,因此只有一个表。
但是我有一种情况,有人为此安排了桌子:
“房屋表”列:ID,地址,城市,州,邮政编码-每个房屋只有一行
ID Addr City State Zip
-------------------------------------------
1 10 Maple Street Boston MA 11203
2 144 South Street Chelmsford MA 11304
3 1 Main Avenue Lowell MA 11280
“自定义信息表”列:ID,名称,值-表如下所示:
ID Name Value
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 Square Footage 1200
2 Square Footage 1930
3 Square Footage
因此,每个房屋记录都有多个行。每年,当可选信息需要更改时,该表实际上都会被重建,因此明年它可能看起来像:
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 First Name John
2 First Name Harry
3 First Name Jim
最终,您积累了100,000个房屋行,并且一年中有10条额外的信息;第二个表现在是1,000,000行信息,其中许多具有冗余(描述)信息。总体而言,数据库要求是人们每天需要获取房屋行信息+相关的自定义字段值数千次。
所以我的问题是:改为以下做法是否不好(或可怕):
A)布置房屋表,并猜测最大数量的自定义列(可能称为“ 1”至“ 10”),然后将这些自定义值插入房屋行中
要么
B)将自定义信息存储在房屋表中,但是每年当需求发生变化时,仅使用自定义信息所需的列数来重建房屋表,这样的想法可能会变得毫无用处,并且您永远都不知道最大数量可能会要求提供可选字段?
谢谢,希望这有意义!