2011-05-27 80 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。只需删除主键并在每个字段中输入两个常规索引即可删除限制。

相关问题