Index: backend/app/migrations/0001_initial.py
===================================================================
--- backend/app/migrations/0001_initial.py	(revision a157eeff78820bcddb71e48d37e8c0ab7d402d21)
+++ backend/app/migrations/0001_initial.py	(revision 38801c05eb9fdacc784a70926c9f8ef3f04638d4)
@@ -1,3 +1,3 @@
-# Generated by Django 5.1.7 on 2025-04-19 08:58
+# Generated by Django 5.1.7 on 2025-04-19 10:27
 
 import django.contrib.postgres.fields
@@ -29,7 +29,5 @@
             name='Subject_Info',
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.TextField()),
-                ('code', models.TextField()),
+                ('subject', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='app.subject')),
                 ('level', models.IntegerField()),
                 ('short', models.TextField(blank=True, null=True)),
@@ -44,5 +42,4 @@
                 ('professors', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True), size=None)),
                 ('assistants', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True), size=None)),
-                ('subject', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='app.subject')),
             ],
             options={
Index: backend/app/models.py
===================================================================
--- backend/app/models.py	(revision a157eeff78820bcddb71e48d37e8c0ab7d402d21)
+++ backend/app/models.py	(revision 38801c05eb9fdacc784a70926c9f8ef3f04638d4)
@@ -1,4 +1,7 @@
 from django.db import models
 from django.contrib.postgres.fields import ArrayField
+
+# to access subject_info for a subject use subject.subject_info.<optional_field>
+# to access subject from subject_info use subject_info.subject.<optional_field>
 
 class Subject(models.Model):
@@ -14,8 +17,10 @@
 
 class Subject_Info(models.Model):
-    subject = models.OneToOneField(Subject, on_delete=models.CASCADE)
+    subject = models.OneToOneField(
+        Subject,
+        on_delete=models.CASCADE,
+        primary_key=True
+    )
 
-    name = models.TextField(null=False)
-    code = models.TextField(null=False)
     level = models.IntegerField(null=False)
     short = models.TextField(blank=True, null=True)
@@ -32,5 +37,5 @@
 
     def __str__(self):
-        return f"Subject info for {self.name}"
+        return f"Subject info for {self.subject.name}"
 
     class Meta:
Index: backend/app/views.py
===================================================================
--- backend/app/views.py	(revision a157eeff78820bcddb71e48d37e8c0ab7d402d21)
+++ backend/app/views.py	(revision 38801c05eb9fdacc784a70926c9f8ef3f04638d4)
@@ -12,11 +12,14 @@
 
 def test_api(request):
-    # subject_info = Subject.objects.all()
-    # subject_info_data = list(subject_info.values())  
-    # json_data = json.dumps({"rows": subject_info_data})
+    all_subjects = Subject.objects.all()
+    all_subjects_info = Subject_Info.objects.all()
 
-    subjects = Subject_Info.objects.all()
-    subjects_data = list(subjects.values())  
-    json_data = json.dumps({"rows": subjects_data})
+    all_subjects_list = list(all_subjects.values())  
+    all_subjects_info_list = list(all_subjects_info.values())  
+
+    for subject, subject_info in zip(all_subjects_list, all_subjects_info_list):
+        subject["info"] = subject_info
+
+    json_data = json.dumps({"rows": all_subjects_list})
     
     return JsonResponse(json.loads(json_data), safe=False)
Index: frontend/src/Home.tsx
===================================================================
--- frontend/src/Home.tsx	(revision a157eeff78820bcddb71e48d37e8c0ab7d402d21)
+++ frontend/src/Home.tsx	(revision 38801c05eb9fdacc784a70926c9f8ef3f04638d4)
@@ -1,23 +1,5 @@
 import { useEffect, useState } from "react";
 
-const subject_values = [
-	"id",
-	"name",
-	"code",
-	"level",
-	"short",
-	"prerequisite",
-	"activated",
-	"e_2024_2025",
-	"e_2023_2024",
-	"e_2022_2023",
-	"mandatory",
-	"mandatoryfor",
-	"semester",
-	"season",
-	"electivefor",
-	"professors",
-	"assistants",
-];
+const subject_values = ["id", "name", "code"];
 
 function Home() {
@@ -33,5 +15,4 @@
 		fetchData();
 	}, []);
-
 	return !isLoaded ? (
 		<p>Loading...</p>
Index: tools/constants/queries.py
===================================================================
--- tools/constants/queries.py	(revision a157eeff78820bcddb71e48d37e8c0ab7d402d21)
+++ tools/constants/queries.py	(revision 38801c05eb9fdacc784a70926c9f8ef3f04638d4)
@@ -18,8 +18,5 @@
 CREATE_SUBJECT_INFO = """
     CREATE TABLE IF NOT EXISTS subject_data (
-        id SERIAL PRIMARY KEY,
-        subject_id INTEGER UNIQUE NOT NULL REFERENCES subject(id) ON DELETE CASCADE,
-        name TEXT NOT NULL,
-        code TEXT NOT NULL,
+        subject_id INTEGER PRIMARY KEY REFERENCES subject(id) ON DELETE CASCADE,
         level INTEGER NOT NULL,
         short TEXT,
@@ -36,10 +33,7 @@
 );
 """
-# TODO:
-# it is repetitive and unnecessary to store the name and code in subject_data,
-# because they can be retrieved with a join, but for now it can stay like this
 INSERT_SUBJECT_INFO =  """
     INSERT INTO subject_data (
-        subject_id, name, code, level, short, prerequisite, activated, participants, 
+        subject_id, level, short, prerequisite, activated, participants, 
         mandatory, mandatory_for, semester, season, elective_for, professors, assistants 
         ) VALUES %s
Index: tools/constants/values.py
===================================================================
--- tools/constants/values.py	(revision a157eeff78820bcddb71e48d37e8c0ab7d402d21)
+++ tools/constants/values.py	(revision 38801c05eb9fdacc784a70926c9f8ef3f04638d4)
@@ -24,6 +24,4 @@
 (
     index + 1,
-    item["subject"],
-    item["code"],
     item["level"],
     item.get("short"),
