Databasernas grunder

vår 2026

Projektuppgift 5

Din uppgift är att skapa kod som gör det möjligt att definiera relationer och utföra operationer i relationsalgebra, såsom projektion och selektion. Koden ska möjliggöra följande funktioner:

Du kan anta att jämförelsen i implementeringen av selektionsoperationen alltid är av typen =, det vill säga operationen behöver inte tillåta andra jämförelseformer.

Testa koden (Python)

Följande kod testar Python-koden:

products = Relation(("id", "name", "price"))

products.add_tuple((1, "rädisa", 7))
products.add_tuple((2, "morot", 5))
products.add_tuple((3, "rova", 4))
products.add_tuple((4, "kålrot", 8))
products.add_tuple((5, "selleri", 4))

print(products)

print(projection(products, ("name")))
print(projection(products, ("price")))
print(projection(products, ("name", "price")))

print(restriction(products, "name", "morot"))
print(restriction(products, "price", 4))

print(projection(restriction(products, "price", 4), ("name")))

Kodens resultat ska se ut på ungefär följande sätt:

{(1, 'rädisa', 7), (2, 'morot', 5), (3, 'rova', 4), (5, 'selleri', 4), (4, 'kålrot', 8)}
{('kålrot',), ('selleri',), ('rädisa',), ('rova',), ('morot',)}
{(7,), (8,), (4,), (5,)}
{('kålrot', 8), ('selleri', 4), ('rädisa', 7), ('rova', 4), ('morot', 5)}
{(2, 'morot', 5)}
{(3, 'rova', 4), (5, 'selleri', 4)}
{('rova',), ('selleri',)}

Testa koden (R)

Följande kod testar R-koden:

products <- Relation(c("id", "name", "price"))

products <- add_tuple(products, c(1, "rädisa", 7))
products <- add_tuple(products, c(2, "morot", 5))
products <- add_tuple(products, c(3, "rova", 4))
products <- add_tuple(products, c(4, "kålrot", 8))
products <- add_tuple(products, c(5, "selleri", 4))

print(products)

print(projection(products, c("name")))
print(projection(products, c("price")))
print(projection(products, c("name", "price")))

print(restriction(products, "name", "morot"))
print(restriction(products, "price", 4))

print(projection(restriction(products, "price", 4), c("name")))

Kodens resultat ska se ut på ungefär följande sätt:

  id    name  price
1  1  rädisa      7
2  2   morot      5
3  3    rova      4
4  4  kålrot      8
5  5 selleri      4

     name
1  rädisa
2   morot
3    rova
4  kålrot
5 selleri

  price
1     7
2     5
3     4
4     8

      name price
1   rädisa     7
2    morot     5
3     rova     4
4   kålrot     8
5  selleri     4

  id     name price
2  2    morot     5

  id    name price
3  3    rova     4
5  5 selleri     4

     name
3    rova
5 selleri

Inlämning

Rapporten ska innehålla din kod.