2016-10-08 47 views
2
  Table one 
       ID | product_code | product name | company_id 
       1 | 12345  | beer cake |343434defee 
       2 | 12346  | vodka cake |343434deereee 

      Table two 
        Product_code |Quantity | price | weight 
        12345  | 34  |345 |0.5 
        12345  | 343 |600 |1.0 
        12345  | 4  |845 |1.5 
        12346  | 341 |345 |0.5 


     CREATE TABLE `one`(
     ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
     product_code VARCHAR(32) NOT NULL , 
     name VARCHAR(30) NOT NULL , 
     company_id VARCHAR(30) NOT NULL) 

     CREATE TABLE two(
     product_code VARCHAR(32) , 
     weight VARCHAR(20) NOT NULL , 
     price INT(4) NOT NULL , 
     Quantity INT(4) NOT NULL , 
     FOREIGN KEY (product_code) REFERENCES one(product_code)) 

這就是我的表的樣子,每種類型的蛋糕都必須顯示在產品登錄頁面上。兩個表格之間的關係由product_code列給出。是否有必要在foriegn表中有一個主鍵?

是否有必要在外表中使用主鍵?

請給我一個適當的模式創建這些?

+2

這不是必需的,但當您查詢表格時它會很有用。你將如何唯一識別表'two'中的記錄?我可能會在表'two'上創建'composite primary key'而不是'Identity' –

+0

Table'two'看起來像一個事務表。你將如何跟蹤和拉動個人交易? – drum

+0

另外,請指定您的SQL風格。 – Alexei

回答

1

您的數據結構設置錯誤。這是你的第一張桌子:

ID | product_code | product name | company_id 
1 | 12345  | beer cake |343434defee 
2 | 12346  | vodka cake |343434deereee 

這很好。 ID是 - 大概 - 每行的唯一ID。它應該被聲明爲主鍵。 product_code應宣佈爲unique

第二個表格應該包含id而不是product_codeProduct_code是第一個表的每一行上的屬性。您有id來引用該行。

+0

產品代碼是唯一的,沒有兩個產品可以具有相同的產品代碼,即使那樣我是否需要將其更改爲ID? –

+0

@BOTJr。 。 。 。你可以用它作爲主鍵,但我贊成合成主鍵。您的外鍵關係應引用參考表的主鍵。 –

+0

我一直在使用產品代碼來作出關於產品的任何疑問。假設我參考第二張表,我可以做'product_code'和'weight',因爲它們對於任何產品都不可能是相同的,但如果我是要在第二個表中使用id而不是產品代碼,我必須先調用第一個表,獲取與該產品代碼對應的ID,然後引用第二個表。 –

1

如果您的FK指向具有唯一約束的列,則可以檢查here以獲取詳細信息。

在做之前,你應該清楚你的設計:

1)你的表提供有意義的名稱。例如。表1 - Product,表2 - ProductTransaction

2)表ProductTransaction創建主鍵:一個ProductTransactionId列應爲適合大多數使用場景

3)創建ProductTransactionProduct表之間的外鍵。雖然你可以使用product_code欄,我建議一定要規範你的定義:

一)從ProductTransaction刪除product_code B)添加ProductId和定義指向Product.ID

這樣一個外鍵,你將存儲更少的數據(只是一些整數而不是字符串)和表之間的連接會更快。

+0

如果OP與這裏的任何東西密切相關,那麼它已經做了更新。 – Drew

相關問題