Sql-Server

使用繼承創建表

  • September 10, 2016

我對 SQL 很陌生。我只是想從頭開始創建一個數據庫來學習。

所以我有一個名為 Addresses 的表,我想創建兩個依賴於它的表,它們是 Country 和 State,我不確定要使用什麼腳本。

提前致謝

我不確定我是否會認為這是一個繼承問題,從描述中,我會說地址表將依賴於其他兩個表,而不是這兩個表依賴於地址表。

但除了這些細節,我建議:

  1. 如果您只儲存美國或美國和加拿大地址,那麼您可以創建一個“StateRegion”表。但在這種情況下,您實際上並不需要 Country 表。
  2. 如果您要儲存來自多個國家/地區的地址,那麼您需要一個 Country 表,但 StateRegion 表比較棘手,因為國家之間的差異很大。我將不得不看看是否有一個標準化的列表。
  1. 對於國家/地區,國家/地區表應該只是國家/地區的 ISO 列表。實際上不需要單獨的 ID 欄位,因為 ISO 國家程式碼是可接受的標準(因此 ISO 中的“S”:-)。只需將 CountryCode(我更喜歡 2 字元程式碼而不是 3 字元程式碼)設置為 CHAR(2) NOT NULL。
  1. 如果儲存非美國/加拿大專用地址:

所以,一般來說:

CREATE TABLE County
(
  CountryCode CHAR(2) NOT NULL PRIMARY KEY,
  CountryName VARCHAR(100) NOT NULL
);

CREATE TABLE Address
(
  AddressID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY,
  UserID INT NOT NULL, -- FK to some User table
  AddressLine1 NVARCHAR(100) NOT NULL,
  AddressLine2 NVARCHAR(100) NULL,
  City NVARCHAR(100) NULL,
  StateProvince NVARCHAR(100) NOT NULL, -- or INT FK to StateProvince table?
  PostalCode NVARCHAR(20) NOT NULL,
  CountryCode CHAR(2) NOT NULL -- FK to Country table
)

與其他方式相比,您更有可能讓 Address 表對 Country 和 State 表具有外鍵依賴關係。下面的內容向您展示了一種創建外鍵引用的方法。

當然,地址所需的欄位會根據您所在的國家/地區而有所不同;您可能需要研究不同的要求並相應地調整欄位。

CREATE TABLE Country
(
CountryID INT NOT NULL PRIMARY KEY IDENTITY(1,1)
, CountryName VARCHAR(500) NOT NULL
, CountryCode VARCHAR(10) NOT NULL
)

CREATE TABLE Addresses
(
AddressID INT NOT NULL PRIMARY KEY IDENTITY(1,1)
, AddressLine1 VARCHAR(1000) NOT NULL
, AddressLine2 VARCHAR(1000) NULL
, City VARCHAR(20) NOT NULL
, [State] CHAR(2) NOT NULL
, Country INT NOT NULL REFERENCES Country(CountryID)
)

引用自:https://dba.stackexchange.com/questions/82177