SQL field with multiple id's of other table

前端 未结 5 461
暗喜
暗喜 2021-01-04 21:27

Could someone give me an idea how to create this database structure. Here is an example:

Table \"countries\":
id, countryname
1, \"US\"
2, \"DE\"
3, \"FR\"
4         


        
相关标签:
5条回答
  • 2021-01-04 21:51

    You need an intersection table for that many-to-many relationship.

    Table Country
    CountryID, CountryName
    
    Table CountryProduct
    CountryID, ProductID
    
    Table Product
    ProductID, ProductName
    

    You then Inner Join all 3 tables to get your list of Countries & Products.

    Select * From Country 
    Inner Join CountryProduct On Country.CountryID = CountryProduct.CountryID 
    Inner Join Product On CountryProduct.ProductID = Product.ProductID
    
    0 讨论(0)
  • 2021-01-04 22:04

    the best approach for relational databases is the following :

    One table for coutries, let's say country_id, country_desc (country_id is primary)

    one table for products, let's say product_id, product_desc and as many columns as you want (product_id is primary)

    if you had only one country for sure, it'd be enough to have a foreign key pointing to country_id in each product row. Having a foreign key asserts that there is an actual country behing a country_id referring to country table.

    In your case you have several countries for a product, so add a separate association table product_id, country_id

    both keys primary and both foreign as well.

    0 讨论(0)
  • 2021-01-04 22:06

    Without denormalizing, you'll need to add an extra table

    Table Product countries
    ProductID CountryID
    1         1
    1         2
    1         4...
    
    0 讨论(0)
  • 2021-01-04 22:10

    You could also make a third table countries_products with fields country_id and product_id.

    0 讨论(0)
  • 2021-01-04 22:12

    What you're talking about is normalisation. You have a many-to-many structure, so you should create another table to link the two. You should never (ok, pretty much never) use delimited strings to store a list of values in a relational database.

    Here's an example of the setup:

    product_countries table
    
    productid | countryid
    ----------+-----------
    1         | 1
    1         | 2
    1         | 4
    2         | 2
    2         | 3
    2         | 4
    

    You can use a foreign key to each other table, then make them both into a composite primary key.

    You can then get a list of supported products for a country ID like this:

    SELECT * FROM products, product_countries
    WHERE products.id = product_countries.productid
    AND product_countries.countryid = $cid
    
    0 讨论(0)
提交回复
热议问题