關於 sql 模型中表的菜鳥問題
我是 SQL 或 PHP 方面的菜鳥,我正在創建一個相當簡單的汽車共享網站。使用者可以參與某人創建的旅行,也可以自己創建旅行。現在我正在設計 SQL 模型,我遇到了一些疑問,也許有人可以幫助我。
我想保存創建給定行程的使用者。這很簡單,表“Trips”和“Users”必須相關,並且表“Trips”具有“User”表的外鍵,包含與給定行程相關的使用者 ID。
問題是,我希望使用者登錄並有機會查看: a) 他參與的旅行;b) 他創造的旅行。那麼,如何分離數據以便不僅可以訪問創建行程的使用者,還可以訪問參與該行程的使用者(以便我可以使用網站中的所有資訊)?在 SQL 模型中有效安排這一點的最佳方法是什麼,以保存創建旅行的使用者和參與它的使用者。
如果沒有更多資訊等,您是否不能只創建一個 EngageTrips 表,並創建一個 CreatedTrips 表並將外鍵掛鉤到這些表中,然後在執行該函式以將該數據帶到最後查看時加入數據 -使用者?
也意味著在導入數據時根據標準控制如何在數據輸入級別將數據輸入到每個表中,等等。
只是一個快速的想法。
User
您的模型在和之間有兩種不同的關係Trip
。它們應該單獨建模。他們有不同的基數。一種是一對多的“創建”關係。
Trip
正如您在問題中所說,這是由 in 的外鍵建模的。第二個是“訂婚”,即多對多。這可以通過創建一個新表(稱為交集表)來處理,該表具有
User
和的外鍵Trip
。隨著設計的進行,該表通常會獲得更多的列。另一種模型是省略“創建的”外鍵,而是將狀態標誌添加到交集表。這個標誌有兩個值——“created”和“engaged”。
選擇是在易於確保數據完整性和易於查詢之間進行折衷。如果每次旅行都必須始終創建一個使用者,那麼最容易通過 NOT NULL 外鍵強制執行。我想您還想確保乘客總數在車輛的容量範圍內,如果他們都在一個列表中,這會更容易。隨著您的設計發展,其他約束將出現。
根據給定的資訊,我的選擇將是外鍵/交集表設計和為所有參與者提供旅行的視圖。