### Body

Currently `start_date` is mandatory parameter.
For DAGs with `schedule=None` we can relax this requirement as no scheduling calculation needed so the `start_date` parameter isn't used.

### Committer

- [X] I acknowledge that I am a maintainer/committer of the Apache Airflow project.
dag1.clear()
        DAG.bulk_write_to_db([dag1, dag2], session=session)
        session.commit()
        stored_datasets = {x.uri: x for x in session.query(DatasetModel).all()}
        d1_orm = stored_datasets[d1.uri]
        d2_orm = stored_datasets[d2.uri]
        d3_orm = stored_datasets[d3.uri]
        assert stored_datasets[uri1].extra == {"should": "be used"}
        assert [x.dag_id for x in d1_orm.consuming_dags] == [dag_id1]
        assert [(x.task_id, x.dag_id) for x in d1_orm.producing_tasks] == [(task_id, dag_id2)]
        assert set(
            session.query(
                TaskOutletDatasetReference.task_id,
                TaskOutletDatasetReference.dag_id,
                TaskOutletDatasetReference.dataset_id,
            )
            .filter(TaskOutletDatasetReference.dag_id.in_((dag_id1, dag_id2)))
            .all()
        ) == {
            (task_id, dag_id1, d2_orm.id),
            (task_id, dag_id1, d3_orm.id),
            (task_id, dag_id2, d1_orm.id),
        }
        
        
        
        
        dag1 = DAG(dag_id=dag_id1, start_date=DEFAULT_DATE, schedule=None)
        EmptyOperator(task_id=task_id, dag=dag1, outlets=[d2])
        dag2 = DAG(dag_id=dag_id2, start_date=DEFAULT_DATE)