當然有不同的方式來設計表格。一個非常基本的方法是:
您可以創建如下所示的表格。我添加了列ValidFrom
和ValidTill
,以確定零件在哪個時間處於活動/正在使用狀態。 這取決於你的數據,如果數據類型date
就夠了,或者你需要datetime
才能更準確。
CREATE TABLE Parts
(
ID bigint NOT NULL
,PartNo varchar(100)
,PartName varchar(100)
,ValidFrom date
,ValidTill date
)
CREATE TABLE Brands
(
ID bigint NOT NULL
,Brand varchar(100)
)
CREATE TABLE Models
(
ID bigint NOT NULL
,BrandsID bigint NOT NULL
,ModelName varchar(100)
)
CREATE TABLE ModelParts
(
ModelsID bigint NOT NULL
,PartID bigint NOT NULL
)
填寫您的數據,如:
INSERT INTO Parts VALUES
(1,'AA1007', 'Screw HyperFuturistic', '2017-08-09', '9999-12-31'),
(1,'AA1001', 'Screw Iron', '1800-01-01', '1918-06-30'),
(1,'AA1002', 'Screw Steel', '1918-07-01', '1945-05-08'),
(1,'AA1004', 'Screw Titanium', '1945-05-09', '1983-10-05'),
(1,'AA1005', 'Screw Futurium', '1983-10-06', '2017-08-08')
INSERT INTO Brands VALUES
(1,'Bosch'),
(2,'Indesit'),
(3,'Samsung'),
(4,'HotPoint'),
(5,'Sharp')
INSERT INTO Models VALUES
(1,1,'A1'),
(2,1,'A2'),
(3,1,'A3'),
(4,2,'A1'),
(5,2,'A2')
INSERT INTO ModelParts VALUES
(1,1)
要選擇特定日期的所有部分(在這種情況下,2013年3月3日)的 「博世A1」 的:
DECLARE @ReportingDate date = '2013-03-03'
SELECT B.Brand
,M.ModelName
,P.PartNo
,P.PartName
,P.ValidFrom
,P.ValidTill
FROM Brands B
INNER JOIN Models M
ON M.BrandsID = B.ID
INNER JOIN ModelParts MP
ON MP.ModelsID = M.ID
INNER JOIN Parts P
ON P.ID = MP.PartID
WHERE B.Brand = 'Bosch'
AND M.ModelName = 'A1'
AND P.ValidFrom <= @ReportingDate
AND P.ValidTill >= @ReportingDate
當然,有幾種方法可以對數據進行歷史記錄。 ValidFrom和ValidTill(ValidTo)是我的最愛之一,因爲您可以輕鬆完成歷史報告。 不幸的是,你必須處理歷史記錄:當插入一個新行時(例如你的螺絲釘),你必須在插入新行之前設置ValidTill列來「關閉」舊記錄。此外,你必須開發邏輯來處理刪除...
那麼,這是一個相當大的話題。你會在萬維網上發現大量的信息。
您可能需要一大堆表格。你應該閱讀SQL關係。多對一,多對多 –
映射表... – Milney
PartSynonyms表或許?當前零件編號位於「零件」表中,其中PartSynonyms列出主零件ID以及該零件每個同義詞的單個記錄。 – xQbert