我可以使用SQL来建模我的数据吗?

时间:2011-05-27 21:49:42

标签: sql database-design

我正在尝试开发一个出价系统,其中列出了一个项目,并且出价者可以出价,其中包括出价金额和消息。一个项目可能有任意数量的出价。投标人还应该能够看到他们在不同项目中所做的所有出价。

我对SQL不熟悉,所以我不确定如何为这种情况建模。我在想以下几点:

  • 用户表,存储有关投标人的信息,例如姓名,身份证号等。
  • 出价表,其中包含系统中的所有出价,其中存储出价工具的用户ID,出价金额和出价说明。
  • 作业表,其中包含海报的用户ID,项目描述,然后是对各种出价的引用。

我看到的问题是如何将这些引用存储到作业表条目中的Bid表条目中?

这是解决这个问题的正确方法吗?我应该考虑使用面向文档的数据库,例如Mongo吗?

2 个答案:

答案 0 :(得分: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个出价。只需删除主键并在每个字段上放入两个常规索引即可删除限制。

答案 1 :(得分: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) );

现在,您可以通过各种联接找出您想要的任何内容(每位用户的最高出价,所有出价,所有出价,最高出价者等)。