我已经准备好开始为ASP.NET MVC应用程序设计数据库了,我有一个关于在表中存储信息的最佳方法的快速问题。
在旧版本的数据库中,我有一个名为Phones
的表,它有大约40-50个不同的列。
您是否建议在Phones
表中保留“基本”数据,然后使用其余数据创建一个名为PhoneDetails
的附加表,而不是在表中包含这么多列? / p>
感谢您的投入!
以下是我表格中的列:(共有59个)
[PhoneID]
,[Make]
,[Model]
,[ProcessorSpeed]
,[Dimensions]
,[Weight]
,[RAM]
,[Storage]
,[BatterySize]
,[TalkTime]
,[StandbyTime]
,[DisplayType]
,[Resolution]
,[DisplaySize]
,[RearCamera]
,[FrontCamera]
,[MinOS]
,[MaxOS]
,[NFC]
,[Notes]
,[Publish]
,[FullName]
,[Date]
,[Colors]
,[Sensors]
,[SIMCardType]
,[ChargingConnectors]
,[AVConnectors]
,[SystemConnectors]
,[USBVersion]
,[BluetoothVersion]
,[BluetoothProfiles]
,[WiFiVersion]
,[WiFiSecurityModes]
,[WirelessConnectivity]
,[GSMTypes]
,[GSMUpload]
,[GSMDownload]
,[LTETypes]
,[LTEUpload]
,[LTEDownload]
,[WCDMATypes]
,[WCDMAUpload]
,[WCDMADownload]
,[BatteryVoltage]
,[RemoveableBattery]
,[MaxMusicPlayback]
,[MaxVideoPlayback]
,[MaxWiFiTime]
,[ProcessorName]
,[ProcessorType]
,[RearAperture]
,[RearFocalLength]
,[RearMinFocusRange]
,[FlashType]
,[FlashOperatingRange]
,[FrontResolution]
,[FrontAperture]
,[DeviceGeneration]
答案 0 :(得分:1)
40-50列听起来像分配列,超出了我可以想象的“电话”表所需,但没有关于这些列是什么的进一步信息,真的很难给出真实的石头。
一般来说,如果你的表看起来像这样:
Id Motorola Nokia LG HTC ...many more...
----------------------------------------
1 1 0 0 0 .....
2 0 0 0 1 .....
3 0 1 0 0 .....
4 1 0 0 0 .....
5 0 0 1 0 .....
你绝对应该将你的数据库规范化为更像:
电话:
Id PhoneTypeId
---------------
1 1
2 4
3 2
4 1
5 3
PHONETYPE:
Id TypeName
---------------
1 Motorola
2 Nokia
3 LG
4 HTC
当然,这只是一个例子,但如果没有关于列的性质的进一步信息是Phones
表,这是我能提供的最好的。
答案 1 :(得分:0)
如果需要,你应该考虑规范化你的一个表,如果表真的有关系,否则只需将表拆分成两个单独的表就没有多少收获。想想任何一列中都有冗余数据吗?
在这种情况下,您可以拥有一个包含该信息的单独表格以及它们之间的FK关系。
答案 2 :(得分:0)
使用FK参考创建另一个用于保存手机详细信息的表是很好的,因为有很多字段。
答案 3 :(得分:0)
我会考虑分成2个表。如果它符合以下任何一个条件。
如果某些列中存在大量具有NULL值的行。
或
如果您的应用程序比其余列更频繁地访问基本列。