<Historic>
-----<ReturnData Year="2010">
----- -----<ReturnHistory>
----- -----<Return StoreDate="2010-07-31" Type="1">
----- -----<EndDate>2010-01-31</EndDate>
----- -----<ReturnDetail TimePeriod="1">
----- ----- -----<Value>2.83</Value>
----- ----- </ReturnDetail>
----- -----</Return>
----- </ReturnData>
-----<ReturnData Year="2010">
----- -----<ReturnHistory>
----- -----<Return StoreDate="2010-07-31" Type="1">
----- -----<EndDate>2010-01-31</EndDate>
----- -----<ReturnDetail TimePeriod="2">
----- ----- -----<Value>1.83</Value>
----- ----- </ReturnDetail>
----- -----</Return>
----- </ReturnData>
<Historic>
我将其存储在表格中,如下所示:
表名=历史
列
StockId : int
StockCode: string
Year:int
StoreDate: datetime
EndDate: datetime
ReturnTypeId: int
TimePeriodId: int
我的桌子是第三种正常形式吗?
您会推荐这种结构,还是应该为每个父节点创建相应的表格,即进一步规范化?
答案 0 :(得分:0)
仅从结构中,没有明确的方法来回答这个问题 - 表是否在3NF中是否在很大程度上取决于该表中存储的数据的含义和“语义”。
我只是在猜测:Year
列很可能取决于StoreDate
(或EndDate
)列 - 对吗?
此外,更多猜测:StockCode
和StockId
相互依赖 - 这也违反了3NF - 尝试将您的股票信息放入单独的表格中:
股票信息
StockId INT
StockCode STRING
然后只保留实际表格中的StockId
,并将表格中的引用添加到StockInformation
列的StockId
。
如果你删除这两个问题,那么你的桌子很可能现在可以在3NF中 - 但是,这又取决于存储的数据和真正的含义 - 根据字段的结构无法准确检查3NF