2011-05-27 64 views
0

我正在嘗試開發一個投標系統,其中列出了一個項目,並且投標人可以投標,其中包括投標金額和消息。一件物品可能有任意數量的出價。投標人還應該能夠看到他們在不同項目上進行的所有出價。我可以使用SQL來建模我的數據嗎?

我不熟悉SQL,所以我有點不確定如何建模這個場景。我的想法是以下幾點:

  • 用戶表,用於存儲有關投標人,如姓名,身份證號碼等
  • 投標表,其中包含系統中的所有的投標信息,這些信息存儲投標人的用戶ID,出價金額,出價說明。
  • 作業表,其中包含海報的用戶ID,項目描述,然後引用各種出價。

我看到的問題是如何將這些引用存儲在作業表條目中的出價表條目?

這是解決這個問題的正確方法嗎?我應該考慮一個面向文檔的數據庫,比如Mongo嗎?

回答

1

SQL將正常工作,就像你有它設置了......我會做:

create table usertable (
    userID integer unsigned not null auto_increment primary key, 
    userName varchar(64)); 
create table jobtable (
    jobID integer unsigned not null auto_increment primary key, 
    jobDesc text, 
    posterUserRef integer not null); 
create table bidtable (
    bidID integer unsigned not null auto_increment primary key, 
    bidAmount integer, 
    bidDesc text, 
    bidTime datetime, 
    bidderUserRef integer not null references usertable(userID), 
    biddingOnJobRef integer not null reference jobtable(jobID)); 

現在你可以計算出任何你想要的各種連接(每用戶最高出價,所有出價作業,所有用戶出價,出價最高的工作等等)。

+0

這幫了很多!實際的SQL代碼就是我接受你的答案的原因。 – samoz 2011-05-29 17:18:42

2

您正在描述多對多的關係。在非常簡單的形式,你的表將是這個樣子:

user: 
    id int primary key 

job: 
    id int primary key 

bids: 
    user_id int 
    job_id int 
    primary key(userid, job_id) 
    foreign key (user_id) references user (id) 
    foreign key (job_id) references job (id) 

基本上,報價表將包含字段代表的用戶和工作,有你需要的任何其他領域,如投標沿金額,日期/時間戳等...

現在,我已將user_id/job_id字段作爲出價表中的主鍵,這將限制每個用戶每個作業的出價爲1。只需刪除主鍵並在每個字段中輸入兩個常規索引即可刪除限制。

相關問題